package com.example.smartagrisys.service;

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import com.example.smartagrisys.dto.LandCropRecordDTO;
import com.example.smartagrisys.dto.LandCropRecordQueryDTO;
import com.example.smartagrisys.entity.LandCropRecord;
import com.example.smartagrisys.vo.LandCropRecordVO;

/**
 * 土地作物记录服务接口
 */
public interface LandCropRecordService extends IService<LandCropRecord> {

    /**
     * 添加土地作物记录
     * @param dto 记录信息
     * @param farmerId 农户ID
     * @return 记录ID
     */
    Long add(LandCropRecordDTO dto, Long farmerId);

    /**
     * 更新土地作物记录
     * @param dto 记录信息
     * @param farmerId 农户ID
     * @return 是否成功
     */
    boolean update(LandCropRecordDTO dto, Long farmerId);

    /**
     * 删除土地作物记录
     * @param id 记录ID
     * @param farmerId 农户ID
     * @return 是否成功
     */
    boolean delete(Long id, Long farmerId);

    /**
     * 获取土地作物记录详情
     * @param id 记录ID
     * @return 记录详情
     */
    LandCropRecordVO getDetail(Long id);

    /**
     * 分页查询土地作物记录
     * @param queryDTO 查询参数
     * @return 分页结果
     */
    Page<LandCropRecordVO> page(LandCropRecordQueryDTO queryDTO);

    /**
     * 更新作物记录状态
     * @param id 记录ID
     * @param status 状态
     * @param farmerId 农户ID
     * @return 是否成功
     */
    boolean updateStatus(Long id, Integer status, Long farmerId);

    /**
     * 记录收获信息
     * @param id 记录ID
     * @param actualYield 实际产量
     * @param farmerId 农户ID
     * @return 是否成功
     */
    boolean recordHarvest(Long id, java.math.BigDecimal actualYield, Long farmerId);

    /**
     * 获取土地的作物记录
     * @param landId 土地ID
     * @param pageNum 页码
     * @param pageSize 每页记录数
     * @return 分页结果
     */
    Page<LandCropRecordVO> getLandCropRecords(Long landId, Integer pageNum, Integer pageSize);

    /**
     * 获取农户的作物记录
     * @param farmerId 农户ID
     * @param pageNum 页码
     * @param pageSize 每页记录数
     * @return 分页结果
     */
    Page<LandCropRecordVO> getFarmerCropRecords(Long farmerId, Integer pageNum, Integer pageSize);
    
    /**
     * 获取状态名称
     * @param status 状态
     * @return 状态名称
     */
    String getStatusName(Integer status);
} 